home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / msh-156.lha / han / han.h < prev    next >
C/C++ Source or Header  |  1996-12-22  |  8KB  |  293 lines

  1. /*-
  2.  * $Id: han.h,v 1.56 1996/12/22 00:22:33 Rhialto Rel $
  3.  *
  4.  * $Log: han.h,v $
  5.  * Revision 1.56  1996/12/22  00:22:33  Rhialto
  6.  * Cosmetics.
  7.  *
  8.  * Revision 1.55  1993/12/30  23:28:00    Rhialto
  9.  * Freeze for MAXON5.
  10.  * Add compile time options LONGNAMES and CREATIONDATE_ONLY.
  11.  * Move lowcyl from Disk to Partition.
  12.  *
  13.  * Revision 1.54  1993/06/24  05:12:49    Rhialto
  14.  * DICE 2.07.54R.
  15.  *
  16.  * Revision 1.53  92/10/25  02:44:29  Rhialto
  17.  * Add PrivateInfo. #define magic cookie.
  18.  *
  19.  * Revision 1.52  92/09/06  00:06:08  Rhialto
  20.  * Add cast to *_EOFs.
  21.  *
  22.  * Revision 1.51  92/04/17  15:39:01  Rhialto
  23.  * Freeze for MAXON3.
  24.  *
  25.  * Revision 1.46  91/10/06  18:26:52  Rhialto
  26.  *
  27.  * Freeze for MAXON
  28.  *
  29.  * Revision 1.43  91/09/28  01:50:02  Rhialto
  30.  * Byteswap routines no longer __stkargs.
  31.  *
  32.  * Revision 1.42  91/06/14  00:09:19  Rhialto
  33.  * DICE conversion
  34.  *
  35.  * Revision 1.40  91/03/03  17:55:38  Rhialto
  36.  * Freeze for MAXON
  37.  *
  38.  * Revision 1.35  91/03/03  17:43:39  Rhialto
  39.  * Cache list is now two lists: LRU and sorted by sector.
  40.  *
  41.  * Revision 1.31  90/11/10  02:50:47  Rhialto
  42.  * Patch 3a. Introduce disk volume date.
  43.  *
  44.  * Revision 1.30  90/06/04  23:18:28  Rhialto
  45.  * Release 1 Patch 3
  46.  *
  47.  *  The header file for the MESSYDOS: file system handler
  48.  *
  49.  *  This code is (C) Copyright 1989 by Olaf Seibert. All rights reserved. May
  50.  *  not be used or copied without a licence.
  51. -*/
  52.  
  53. #define SysBase_DECLARED
  54.  
  55. #include "dev.h"
  56.  
  57. #ifndef CLIB_EXEC_PROTOS_H
  58. #include <clib/exec_protos.h>
  59. #endif
  60. #ifndef CLIB_ALIB_PROTOS_H
  61. #include <clib/alib_protos.h>
  62. #endif
  63.  
  64. extern struct ExecBase *SysBase;
  65.  
  66. /*----- Configuration section -----*/
  67.  
  68. #define CONVERSIONS        1
  69. #define NONCOMM         0
  70. #define READONLY        0
  71. #define INPUTDEV        1
  72. #define CREATIONDATE_ONLY    1
  73. #define TASKWAIT        1
  74.  
  75. /*----- End configuration section -----*/
  76.  
  77. #define MODE_CREATEFILE (1L<<31)
  78. #define FILE_DIR     2
  79. #define FILE_FILE   -3
  80.  
  81. #define MS_SPC        2        /* Sectors per cluster */
  82. #define MS_RES        1        /* Reserved sectors (boot block) */
  83. #define MS_NFATS    2        /* Number of FATs */
  84. #define MS_NDIRS    112     /* Number of directory entries */
  85. #define MS_NSECTS   1440    /* total number of sectors */
  86. #define MS_SPF        3        /* Sectors per FAT */
  87. #define MS_ROOTDIR  (MS_RES + MS_SPF * MS_NFATS)
  88. #define MS_DIRENTSIZE  sizeof(struct MsDirEntry) /* size of a directory entry */
  89.  
  90. #define MS_FIRSTCLUST    2    /* Very strange convention... */
  91.  
  92. #define FAT_EOF     0xFFFF    /* end of file FAT entry */
  93. #define FAT_UNUSED  0        /* unused block */
  94. #define SEC_EOF     ((word)-1)    /* end of FAT chain */
  95. #define ROOT_SEC    ((word)-1)    /* where the root directory 'is' */
  96.  
  97. #define DIR_DELETED        0xE5
  98. #define DIR_DELETED_MASK    0x80
  99.  
  100. #if LONGNAMES
  101. struct MsDirEntry {
  102.     word        msd_Time;
  103.     word        msd_Date;
  104.     word        msd_Cluster;
  105.     ulong        msd_Filesize;
  106.     byte        msd_Attributes;
  107.     byte        msd_Name[21];        /* Note: odd aligned */
  108. };
  109. #define         L_8     21
  110. #define         L_3     0
  111. #define         OtherEndianMsd(e)
  112. #define         msd_CreationTime(e) (*(word *)(&(e).msd_Name[17]))
  113. #define         msd_CreationDate(e) (*(word *)(&(e).msd_Name[19]))
  114. #else
  115. /*
  116.  * This structure has its byte order wrong, when it is on the disk.
  117.  */
  118.  
  119. struct MsDirEntry {
  120.     byte        msd_Name[8];
  121.     byte        msd_Ext[3];
  122.     byte        msd_Attributes;
  123.     word        msd_CreationTime;        /* vollabel only */
  124.     word        msd_CreationDate;        /* vollabel only */
  125.     byte        msd_Pad1[6];
  126.     word        msd_Time;
  127.     word        msd_Date;
  128.     word        msd_Cluster;
  129.     ulong        msd_Filesize;
  130. };
  131. #define         L_8     8
  132. #define         L_3     3
  133. void  OtherEndianMsd(struct MsDirEntry *msd);
  134. #define         msd_CreationTime(e) ((e).msd_CreationTime)
  135. #define         msd_CreationDate(e) ((e).msd_CreationDate)
  136. #endif
  137.  
  138. #define ATTR_READONLY        0x01
  139. #define ATTR_HIDDEN        0x02
  140. #define ATTR_SYSTEM        0x04
  141. #define ATTR_VOLUMELABEL    0x08
  142. #define ATTR_DIRECTORY        0x10
  143. #define ATTR_ARCHIVED        0x20
  144.  
  145. #define ATTR_DIR        (ATTR_DIRECTORY | ATTR_VOLUMELABEL)
  146.  
  147. #define DATE_MIN        0x21
  148.  
  149. struct DirEntry {
  150.     struct MsDirEntry de_Msd;
  151.     word        de_Sector;
  152.     word        de_Offset;
  153. };
  154.  
  155. struct DiskParam {
  156.     word        bps;    /* bytes per sector */
  157.     word        spc;    /* byte: sectors per cluster */
  158.     word        res;    /* reserved sectors (boot block) */
  159.     word        nfats;    /* byte: number of fats */
  160.     word        ndirs;    /* number of directory entries */
  161.     word        nsects;    /* total number of sectors on disk */
  162.     word        media;    /* byte: media byte */
  163.     word        spf;    /* sectors per fat */
  164.     word        spt;    /* sectors per track */
  165.     word        nsides;    /* # sides */
  166.     word        nhid;    /* Number of hidden sectors */
  167.     /* derived parameters */
  168.     word        start;    /* sector of cluster 0 */
  169.     word        maxclst;    /* highest cluster number */
  170.     word        rootdir;    /* first sector of root dir */
  171.     word        ndirsects;    /* # of root directory sectors */
  172.     word        datablock;    /* first block available for files &c */
  173.     word        bpc;    /* bytes per cluster */
  174.     word        freeclusts; /* amount of free space */
  175.     struct DirEntry vollabel;    /* copy of volume label */
  176.     word        fat16bits;    /* Is the FAT 16 bits/entry? */
  177. };
  178.  
  179. #define CHECK_BOOTJMP    0x01    /* accept disk only with JMP or 00 */
  180. #define CHECK_SANITY    0x02    /* check Bios Parameter Block */
  181. #define CHECK_SAN_DEFAULT 0x04    /* use default values when bpb not ok */
  182. #define CHECK_USE_DEFAULT 0x08    /* always use default values */
  183.  
  184. struct Partition {
  185.     long        offset;    /* offset to sector 0 in bytes */
  186.     int         spt_dd;    /* normal #sectors/track */
  187.     int         spt_hd;    /* #s/t for HD floppies */
  188. };
  189.  
  190. #define NICE_TO_DFx    (1L<<16)/* flag bit in de_Interleave */
  191. #define PROMISE_NOT_TO_DIE  (1L<<17)/* flag bit in de_Interleave */
  192.  
  193. #define MSH_MAGIC    'Msh\0' /* Magic word in DosPackets */
  194.  
  195. /*
  196.  * A pointer to an MSFileLock is put into the fl_Key field of a DOS
  197.  * FileLock structure. We share the MSFileLock with all FileLocks on the
  198.  * same file. This way, you can compare FileLocks based on their fl_Key
  199.  * and fl_Task fields, as seems to be done sometimes. Also, a pointer to
  200.  * an MSFileLock is put in MSFileHandles.
  201.  *
  202.  * For ease, we keep a copy of the directory entry in core, WITH THE BYTE
  203.  * ORDER CORRECTED FOR THIS PROCESSOR.
  204.  */
  205.  
  206. struct MSFileLock {
  207.     struct MinNode  msfl_Node;
  208.     short        msfl_Refcount;    /* -1: exclusive, >0: # of shared
  209.                      * locks */
  210.     struct MSFileLock *msfl_Parent;    /* Pointer to parent directory */
  211.     struct MsDirEntry msfl_Msd;     /* Copy of directory entry */
  212.     word        msfl_DirSector;    /* Location of directory entry */
  213.     word        msfl_DirOffset;
  214.     word        msfl_Flags;
  215. };
  216.  
  217. #define MSFL_DIRTY  0x01        /* Only used in MSWrite */
  218.  
  219. /*
  220.  * A pointer to an MSFileHandle is put into the fh_Arg1 field of a DOS
  221.  * FileHandle. We get that value with many DOS packets that manipulate the
  222.  * contents of a file.
  223.  */
  224.  
  225. struct MSFileHandle {
  226.     struct MSFileLock *msfh_FileLock;
  227.     long        msfh_SeekPos;
  228.     word        msfh_Cluster;
  229. #if CONVERSIONS
  230.     int         msfh_Conversion;
  231. #endif
  232. };
  233.  
  234. /*
  235.  * Return values of CompareNames.
  236.  */
  237.  
  238. #define CMP_NOT_EQUAL        0    /* Names do not match at all */
  239. #define CMP_OK_DIR        1    /* Name matches with a subdir entry */
  240. #define CMP_OK_FILE        2    /* Name matches with a file entry */
  241. #define CMP_INVALID        3    /* First part of name matches with a file
  242.                  * entry, or other invalid component name */
  243. #define CMP_FREE_SLOT        5
  244. #define CMP_END_OF_DIR        6
  245.  
  246. struct LockList {
  247.     struct MinList  ll_List;
  248.     void       *ll_Cookie;    /* we don't want to know what this is! */
  249. };
  250.  
  251. struct CacheSec {
  252.     struct MinNode  sec_NumberNode;
  253.     struct MinNode  sec_LRUNode;
  254.     word        sec_Number;
  255.     word        sec_Refcount;
  256.     byte        sec_Data[2];/* Really Disk.bps */
  257. };
  258.  
  259. #define SEC_DIRTY   0x8000    /* Bit in sec_Refcount */
  260.  
  261. struct Cache {
  262.     struct MinList  LRUList;
  263.     struct MinList  NumberList;
  264. };
  265.  
  266. #define OFFSETOF(tag, member)    ((long)(&((struct tag *)0)->member))
  267.  
  268. struct PrivateInfo {
  269.     short        Revision;
  270.     short        Size;
  271.     char       *RCSId;
  272.     short       *CheckBootBlock;
  273.     short       *DefaultConversion;
  274.     struct IOExtTD **DiskIOReq;
  275. #if CONVERSIONS
  276.     short        NumConversions;
  277.     struct {
  278.     unsigned char **to, **from;
  279.     }            Table[2];
  280. #endif
  281. };
  282.  
  283. #define PRIVATE_REVISION    2
  284.  
  285. #ifndef Prototype
  286. #define Prototype   extern
  287. #endif
  288. #ifndef Local
  289. #define Local        static
  290. #endif
  291.  
  292. #include "hanproto.h"
  293.